Next: Blocks and Exits, Previous: Variable Bindings, Up: Control Structure [Contents][Index]
These conditional forms augment Emacs Lisp’s simple
if, and, or, and
cond forms.
This macro evaluates keyform, then compares it
with the key values listed in the various clauses.
Whichever clause matches the key is executed; comparison is
done by eql. If no clause matches, the
cl-case form returns nil. The
clauses are of the form
(keylist body-forms…)
where keylist is a list of key values. If there
is exactly one value, and it is not a cons cell or the symbol
nil or t, then it can be used by
itself as a keylist without being enclosed in a
list. All key values in the cl-case form must be
distinct. The final clauses may use t in place
of a keylist to indicate a default clause that
should be taken if none of the other clauses match. (The
symbol otherwise is also recognized in place of
t. To make a clause that matches the actual
symbol t, nil, or
otherwise, enclose the symbol in a list.)
For example, this expression reads a keystroke, then does one of four things depending on whether it is an ‘a’, a ‘b’, a RET or C-j, or anything else.
(cl-case (read-char) (?a (do-a-thing)) (?b (do-b-thing)) ((?\r ?\n) (do-ret-thing)) (t (do-other-thing)))
This macro is just like cl-case, except that
if the key does not match any of the clauses, an error is
signaled rather than simply returning nil.
This macro is a version of cl-case that
checks for types rather than values. Each clause
is of the form ‘(type
body…)’. See Type Predicates,
for a description of type specifiers. For example,
(cl-typecase x (integer (munch-integer x)) (float (munch-float x)) (string (munch-integer (string-to-int x))) (t (munch-anything x)))
The type specifier t matches any type of
object; the word otherwise is also allowed. To
make one clause match any of several types, use an (or
…) type specifier.
This macro is just like cl-typecase, except
that if the key does not match any of the clauses, an error
is signaled rather than simply returning
nil.
Next: Blocks and Exits, Previous: Variable Bindings, Up: Control Structure [Contents][Index]